import sys

from main import GetArgs, WTxt


def GetRecursionPasswdSet(素材集: list, 成型: set, deep=0):
  if deep == 0:
    成型.add(素材集[deep])
    成型.add(素材集[deep].upper())
    GetRecursionPasswdSet(素材集, 成型, deep + 1)
  elif deep < len(素材集):
    for 已成型素材 in tuple(成型):
      成型.add(已成型素材 + 素材集[deep])
      成型.add(已成型素材 + 素材集[deep].upper())
    GetRecursionPasswdSet(素材集, 成型, deep + 1)
  return 成型


def GetNamePasswdSet(小写素材):
  全部素材集 = set()

  小写素材 = [e.lower() for e in 小写素材]
  首字母连写 = ''.join([e[0] for e in 小写素材])
  全部素材集 |= set(小写素材)
  全部素材集.add(首字母连写)
  全部素材集.add(''.join(小写素材[1:]))
  全部素材集.add(''.join(小写素材))

  大写素材 = [e.upper() for e in 小写素材]
  全部素材集 |= set(大写素材)
  全部素材集.add(首字母连写.upper())
  全部素材集.add(''.join(大写素材[1:]))
  全部素材集.add(''.join(大写素材))

  全部素材集 |= set([e[0].upper() + e[1:] for e in 小写素材])

  连写素材 = GetRecursionPasswdSet(小写素材, set())
  全部素材集 |= 连写素材
  return 全部素材集


if __name__ == '__main__':
  if '-h' in sys.argv:
    print(r'''
    python3 name_passwd.py [-h] [-e 姓名拼音] [-o 字典输出路径]
    -e: 姓名拼音，使用"-"分割
      
    -o: 根据表达式生成的密码保存路径
    
    例如:
    python3 name_passwd.py -i ha-li -o output.txt

    -h: 显示帮助信息
    ''')
    exit(0)
  savePath = GetArgs('-o', 'output.txt')
  expression = GetArgs('-e', None)
  if expression is None:
    print('''
    未用 -e 指定表达式
    更多信息请使用 python3 name_passwd.py -h 参考帮助信息
    ''')
    exit(0)
  passwords = GetNamePasswdSet(expression.split('-'))
  WTxt(savePath, '\n'.join(passwords))
  print('完成！生成密码 {} 条'.format(len(passwords)))
